op testpp : -> Stmt .
eq testpp = (
x := 3 ;
while (1 <= x) do (
 x := x + -1 ;
 if (not((++ x + 1) / 2 <= 1) and (3 <= 5)) then (y := y + 1) else z := z + 1 ;
 x := x + -1
)
) .
*** < x |-> 0 , y |-> 1 , z |-> 2,[idIL] >


op testppn : -> Stmt .
eq testppn = (
x := 2 ;
while (1 <= x) do (
 x := x + -2 ;
 if (not((++ x + 1) / (++ x + 1) <= 0) and (3 <= 5)) then (y := y + 1)
else z := z + 1 ;
 x := x + -1
)
) .
*** < x |-> 0 , y |-> 2 , z |-> 0,[idIL] >
*** < x |-> 0 , y |-> 1 , z |-> 1,[idIL] >
*** < x |-> 0 , y |-> 0 , z |-> 2,[idIL] >


op testhalt : -> Stmt .
eq testhalt = (
x := 3 ;
while (1 <= x) do (
 y := y + 1 ;
 if (x <= 2) then halt else z := z + 1 ;
 x := x + -1
)
) .
*** < x |-> 2 , y |-> 2 , z |-> 1,[idIL] >


op testdiv0 : -> Stmt .
eq testdiv0 = (
x := 1 ;
while (1 <= x) do (
 x := x + -1 ;
 if (not((++ x + 1) / x <= 1) and (3 <= 5)) then (y := y + 1) else z := z + 1 ;
 x := x + -1
)
) .
*** < x |-> 0 , y |-> 1 , z |-> 0,[idIL] >
*** < x |-> 1 , y |-> 0 , z |-> 0,[idIL] >


op testoutput : -> Stmt .
eq testoutput = (
x := 3 ;
while (1 <= x) do (
 y := y + 1 ;
 if (x <= 2) then output (x + 1) else z := z + 1 ;
 x := x + -1
)
) .
***  < x |-> 0 , y |-> 3 , z |-> 1,[3,2] >


op testall : -> Stmt .
eq testall = (
x := 1 ;
while (1 <= x) do (
 x := x + -2 ;
 if (not(x + x + 2 <= (++ x + x)) and (3 <= 5)) then output ((++ x) /
x) else ( z := 1 ; halt) ;
 x := x + -2
)
) .
*** < x |-> -1 , y |-> 0 , z |-> 0,[1] >
*** < x |-> 0 , y |-> 0 , z |-> 0,[idIL] >
*** < x |-> 0 , y |-> 0 , z |-> 1,[idIL] >
